#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

//计算对数
double log2n(int n){
    return n>0 ? log2(n) : 0 ;
}
//计算平方根
double sqrtn(int n){
    return sqrt(n);
}
double n_val(int n){
    return n;
}
double n_log2n(int n){
    return n>0 ? n*log2(n) : 0 ;
}
double n2(int n){
    return pow(n,2);
}
double n3(int n){
    return pow(n,3);
}
double two_n(int n){
    return pow(2,n);
}
double factorial(int n){
    double result = 1;
    for(int i=2;i<=n;i++){
        result*=i;
    }
    return result;
}
int main(){
    int max_n;
    cout<<"请输入最大n值：";
    cin>>max_n;

    cout<<setw(5)<<"n"<<setw(10)<<"log2n"<<setw(10)<<"sqrtn"
        <<setw(10)<<"n"<<setw(12)<<"nlog2n"<<setw(10)<<"n^2"
        <<setw(10)<<"n^3"<<setw(12)<<"2^n"<<setw(15)<<"n!"<<endl;
    
    for(int n=1;n<=max_n;n++){
        cout<<setw(5)<<n
            <<setw(10)<<fixed<<setprecision(2)<<log2n(n)
            <<setw(10)<<fixed<<setprecision(2)<<sqrtn(n)
            <<setw(10)<<fixed<<setprecision(2)<<n_val(n)
            <<setw(12)<<fixed<<setprecision(2)<<n_log2n(n)
            <<setw(10)<<fixed<<setprecision(2)<<n2(n)
            <<setw(10)<<fixed<<setprecision(2)<<n3(n)
            <<setw(12)<<fixed<<setprecision(2)<<two_n(n)
            <<setw(15)<<fixed<<setprecision(2)<<factorial(n)<<endl;
    }
    system("pause");
    return 0;
}